package cn.iocoder.yudao.module.reading.dal.mysql.user;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.reading.controller.app.user.vo.UserSoftDeletedPageReqVO;
import cn.iocoder.yudao.module.reading.dal.dataobject.user.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;

/**
 * 用户基本信息 Mapper
 *
 * @author 李晨
 */
@Mapper
@Component("readingUserMapper") // 指定Bean名称避免与AdminUserMapper冲突
public interface UserMapper extends BaseMapperX<UserDO> {

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户信息
     */
    default UserDO selectByUsername(String username) {
        return selectOne(UserDO::getUsername, username);
    }

    // 注释掉手机号查询方法
    // /**
    //  * 根据手机号查询用户
    //  *
    //  * @param phone 手机号
    //  * @return 用户信息
    //  */
    // default UserDO selectByPhone(String phone) {
    //     return selectOne(UserDO::getPhone, phone);
    // }

    /**
     * 根据用户名查询用户（注释掉手机号查询）
     *
     * @param usernameOrPhone 用户名
     * @return 用户信息
     */
    default UserDO selectByUsernameOrPhone(String usernameOrPhone) {
        // 只按用户名查询，注释掉手机号查询
        return selectByUsername(usernameOrPhone);
        // UserDO user = selectByUsername(usernameOrPhone);
        // if (user != null) {
        //     return user;
        // }
        // // 再尝试按手机号查询
        // return selectByPhone(usernameOrPhone);
    }

    /**
     * 根据用户名查询用户（只查询未删除的用户）- 用于注册时检查重复
     *
     * @param username 用户名
     * @return 用户信息（只返回未删除的用户）
     */
    default UserDO selectByUsernameIncludeDeleted(String username) {
        return selectOne(new LambdaQueryWrapperX<UserDO>()
                .eq(UserDO::getUsername, username)
                .eq(UserDO::getDeleted, false)); // 只查询未删除的用户
    }

    // 注释掉手机号查询方法
    // /**
    //  * 根据手机号查询用户（只查询未删除的用户）- 用于注册时检查重复
    //  *
    //  * @param phone 手机号
    //  * @return 用户信息（只返回未删除的用户）
    //  */
    // default UserDO selectByPhoneIncludeDeleted(String phone) {
    //     return selectOne(new LambdaQueryWrapperX<UserDO>()
    //             .eq(UserDO::getPhone, phone)
    //             .eq(UserDO::getDeleted, false)); // 只查询未删除的用户
    // }

    /**
     * 分页查询已软删除的用户
     *
     * @param pageReqVO 分页查询条件
     * @return 已软删除用户分页结果
     */
    default PageResult<UserDO> selectSoftDeletedPage(UserSoftDeletedPageReqVO pageReqVO) {
        return selectPage(pageReqVO, new LambdaQueryWrapperX<UserDO>()
                .likeIfPresent(UserDO::getUsername, pageReqVO.getUsername())
                .likeIfPresent(UserDO::getNickname, pageReqVO.getNickname())
                // .likeIfPresent(UserDO::getPhone, pageReqVO.getPhone()) // 注释掉手机号查询
                .likeIfPresent(UserDO::getEmail, pageReqVO.getEmail())
                .eq(UserDO::getDeleted, true) // 只查询已软删除的用户
                .orderByDesc(UserDO::getUpdateTime));
    }

}
